package com.example.springbootdisconf.config;

import com.baidu.disconf.client.common.annotations.DisconfFile;
import com.baidu.disconf.client.common.annotations.DisconfFileItem;
import com.baidu.disconf.client.common.annotations.DisconfUpdateService;
import com.baidu.disconf.client.common.update.IDisconfUpdate;
import org.springframework.context.annotation.Configuration;

@Configuration//这里使用什么注解无所谓，只要能注入就可以
@DisconfFile(filename = "simple.properties")//@DisconfFile用于指定分布式配置文件
//通过@DisconfUpdateService这个注解来监听配置信息的更新事件，
// 它有三种取值：classes，对应配置类；confFileKeys，对应配置文件；itemKeys，对应独立配置项，
// 例如：@DisconfUpdateService(confFileKeys = { "simple.properties" })或@DisconfUpdateService(itemKeys = { "aa" })。
// 配置类、配置文件和独立配置项都可以指定为列表，用逗号分隔。
@DisconfUpdateService(classes = {SimpleConfig.class})
//注解了@DisconfUpdateService的类同时要实现IDisconfUpdate并且实现reload方法，否则配置更新之后就无法触发回调动作。
public class SimpleConfig implements IDisconfUpdate {
    private String name;
    private int age;

    /**
     * 更新配置时的回调函数，每次更新配置都会调reload方法
     *
     * @throws Exception
     */
    @Override
    public void reload() throws Exception {
        System.out.println("simple.properties配置文件更新了，你可以在这里做一些事你想做的事");
        System.out.println("更新后的name是：" + name + "、age是：" + age);
    }

    //@DisconfFileItem用于指定配置文件中的key，比如redis.host
    //associateField用于指定类的属性，即当前值设置到当前类的哪个属性中，写不写无所谓
    @DisconfFileItem(name = "name", associateField = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @DisconfFileItem(name = "age")
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

